#include <iostream>
#include <string>
#include <vector>
#include <sw/redis++/redis++.h>

using namespace std;

void test1(sw::redis::Redis& redis)
{
    redis.flushall();
    redis.zadd("key", "f1", 111);
    redis.zadd("key", {
        make_pair("f2", 222),
        make_pair("f3", 333)
    });
    vector<pair<string, double>> members = {
        make_pair("f4", 444),
        make_pair("f5", 555)
    };
    redis.zadd("key", members.begin(), members.end());

    vector<string> res;
    auto it = back_inserter(res);
    redis.zrange("key", 0, -1, it);
    for(auto& e : res)
    {
        cout << e << endl;
    }

    vector<pair<string, double>> ress;
    auto it2 = back_inserter(ress);
    redis.zrange("key", 0, -1, it2);
    for(auto& e : ress)
    {
        cout << e.first << " " << e.second << endl;
    }
}

void test2(sw::redis::Redis& redis)
{
    redis.flushall();
    redis.zadd("key", "f1", 111);
    redis.zadd("key", "f2", 222);
    redis.zadd("key", "f3", 333);
    auto res = redis.zcard("key");
    cout << res << endl;
}

void test3(sw::redis::Redis& redis)
{
    redis.flushall();
    redis.zadd("key", "f1", 111);
    redis.zadd("key", "f2", 222);
    redis.zadd("key", "f3", 333);
    auto res = redis.zcard("key");
    cout << res << endl;

    redis.zrem("key", "f1");
    res = redis.zcard("key");
    cout << res << endl;
}

void test4(sw::redis::Redis& redis)
{
    redis.flushall();
    redis.zadd("key", "f1", 111);
    redis.zadd("key", "f2", 222);
    redis.zadd("key", "f3", 333);
    auto res = redis.zscore("key", "f1");
    cout << res.value() << endl;
}

void test5(sw::redis::Redis& redis)
{
    redis.flushall();
    redis.zadd("key", "f1", 111);
    redis.zadd("key", "f2", 222);
    redis.zadd("key", "f3", 333);
    auto res = redis.zrank("key", "f2");
    cout << res.value() << endl;
}

int main()
{
    sw::redis::Redis redis("tcp://127.0.0.1:6379");

    // test1(redis);
    // test2(redis);
    // test3(redis);
    // test4(redis);
    test5(redis);

    return 0;
}